using UnityEngine;
using System.Collections;

/// <summary>
/// Intro.classe ligada na cãmera da cena para gerenciamento geral desta
/// </summary>
public class Intro : MonoBehaviour
{
	/// <summary>
	/// A imagem que vai aparecer de fundo
	/// </summary>
	public Texture2D Logo;
	
	/// <summary>
	/// Tempo que demora para começar o fade-in.
	/// </summary>
	public float PreDelay = 0.0f;
	
	/// <summary>
	/// Tempo médio para a imagem começar o fade-out
	/// </summary>
	public float MidDelay = 60.0f;
	
	/// <summary>
	/// Tempo que fica após a imagem ter escurecido totalmente antes da próxima ação
	/// </summary>
	public float PosDelay = 0.0f;
	
	/// <summary>
	/// Transparência inicial
	/// </summary>
	public float Alpha = 0.0f;
	
	/// <summary>
	/// Quanto a transparência muda a cada passo
	/// </summary>
	public float Factor = 0.75f;
	
	/// <summary>
	/// Passo, cada vez que muda
	/// </summary>
	public int Step;
	
	/// <summary>
	/// Relógio
	/// </summary>
	private float Timer = 0.0f;
	
	void Start()
	{
		//o passo começa com o valor de espera
		Step = PreDelay <= 0.0f ? 1 : 0;//evita valores negativos ao iniciar
	}
	
	void Update()
	{
		if (Timer > 0.0f)
			if (Input.anyKeyDown)
				Timer = 0;
			else
				Timer = Mathf.Clamp(Timer - Time.smoothDeltaTime, 0.0f, float.PositiveInfinity);
		else
			switch (Step)
			{
                case 0:
                    Step = 1;
                    Timer = PreDelay;
                    break;
                case 1:
                    Alpha = Mathf.Clamp(Alpha + Time.smoothDeltaTime * Factor, 0.0f, 1.0f);
                    if (Alpha == 1.0f)
                        Step = MidDelay <= 0.0f ? 3 : 2;
                    break;
                case 2:
                    Step = 3;
                    Timer = MidDelay;
                    break;
                case 3:
                    Alpha = Mathf.Clamp(Alpha - Time.smoothDeltaTime * Factor, 0.0f, 1.0f);
                    if (Alpha == 0.0f)
                        Step = PosDelay <= 0.0f ? 5 : 4;
                    break;
                case 4:
                    Step = 5;
                    Timer = PosDelay;
                    break;
				default:
					Application.LoadLevel("02_Menu");
					break;
            };
	}
	
	void OnGUI()
	{
		Color tempColor = GUI.color;
		
		GUI.color = new Color(1.0f, 1.0f, 1.0f, Alpha);
		GUI.DrawTexture(
			new Rect(
				0.0f,
				0.0f,
				Logo.width * Screen.width / 960.0f,
				Logo.height * Screen.height / 512.0f
			),
			Logo
		);
		
		GUI.color = tempColor;
	}
	
}